package io.jnet.common;

public enum IoMode
{
    /**
     * 简单的处理逻辑。只有io工作线程。在读取到一个消息后，在io回调线程内处理完业务逻辑放入写出堆栈。
     */
    SIMPLE, //
    /**
     * io线程和业务线程分开。每一个io线程绑定一个处理器。io线程读取到数据后放入任务处理器并尝试唤醒对应的线程。一个任务处理器占据一个业务线程资源。<br/>
     * 当任务处理器没有数据处理时则会让当前线程进行阻塞状态。<br/>
     * 由于同一个通道的数据可能被不同的io线程处理，因此也会进入到不同的任务处理器处理。所以一个通道上的数据响应顺序可能和请求到达的顺序不同
     */
    THREAD_ATTACH,
    /**
     * io线程和业务线程分开。io线程读取数据后放入任务处理器。任务处理器和通道是1:1对应关系。当任务处理器有数据时则会放入业务线程池进行处理<br/>
     * 任务处理器处理完数据放入写出堆栈请求写出。<br/>
     * 任务处理器处理完所有数据则会退出任务处理，让出线程资源。
     */
    CHANNEL_ATTACH, //
    /**
     * io线程和业务线程分开。io线程读取到数据后放入任务处理器并尝试唤醒对应的线程。一个任务处理器占据一个业务线程资源。<br/>
     * 每一个通道的处理器是固定的。但是处理器本身要处理n个通道的数据。<br/>
     * 当任务处理器没有数据处理时则会让当前线程进行阻塞状态。<br/>
     */
    MUTLI_ATTACH
}
